package opencm.cli;

import java.math.BigDecimal;

import opencm.Main;
import opencm.PlanoSaude;
import opencm.RepositorioPlanoSaude;

public final class CadastrarPlanoSaude extends Acao {

	private final RepositorioPlanoSaude planosDeSaude;

	public CadastrarPlanoSaude() {
		this.planosDeSaude = Main.repositorioPlanoSaude;
	}

	@Override
	public String toString() {
		return "Cadastrar Plano De Saúde";
	}

	public void executar() {
		PlanoSaude planoSaude = null;
		while (true) {
			try {
				planoSaude = new PlanoSaude(readLine("Nome", true));
				planoSaude.setContato(readLine("Contato [(00)0000-0000]"));
				planoSaude.setPrecoConsulta(readPrecoConsulta());
				break;
			} catch (IllegalArgumentException e) {
				out.println(e.getMessage());
			}
		}
		
		if (!planoSaude.isValido()) {
			out.println("Atenção: Dados incompletos. Esse Plano de Saúde não poderá ser usado em uma Consulta.");
		}
		
		this.planosDeSaude.adicionar(planoSaude);
		
		out.printf("Plano De Saúde adicionado com sucesso!%n");
		out.printf("%n");
		out.printf("%20s: %s%n", "Nome", planoSaude.getNome());
		out.printf("%20s: %s%n", "Contato", planoSaude.getContato());
		out.printf("%20s: %s%n", "Preço Consulta", planoSaude.getPrecoConsulta());
	}

	private BigDecimal readPrecoConsulta() {
		try {
			String preco = readLine("Preço Consulta [50.00]", false);
			if (preco == null || preco.isEmpty()) {
				return null;
			} else {
				return new BigDecimal(preco);
			}
		} catch (NumberFormatException e) {
			out.println(e.getMessage());
			return null;
		}
	}

}
